import fb
import utime
from machine import RTC
from machine import Timer , I2C ,Pin
import esp
import machine
import sht31
from micropython import const
import network
import ntptime 
import onewire
import ds18x20
zf=[
b"\x00\x00\x00\x00\x00\x80\xC0\x40\x40\x40\x80\x00\x00\x00\x00\x00\x00\x00\xF0\xFE\x0F\x01\x00\x00\x00\x00\x01\x07\xFE\xF0\x00\x00\x00\x00\x3F\xFF\xC0\x00\x00\x00\x00\x00\x00\x80\xFF\x3F\x00\x00\x00\x00\x00\x01\x03\x06\x0C\x08\x08\x08\x06\x03\x01\x00\x00\x00",#0#0
b"\x00\x00\x00\x00\x00\x00\x00\x80\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x08\x0C\x0F\x0F\x0C\x08\x08\x08\x00\x00\x00",#1#1
b"\x00\x00\x00\x00\x80\x40\x40\x40\x40\x40\xC0\x80\x80\x00\x00\x00\x00\x00\x1E\x19\x00\x00\x00\x00\x00\x00\x00\xC1\xFF\x3E\x00\x00\x00\x00\x00\x00\x80\x40\x30\x18\x0C\x06\x03\x01\x00\xC0\x00\x00\x00\x00\x0E\x0D\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0E\x03\x00\x00",#2#2
b"\x00\x00\x00\x80\x80\x40\x40\x40\x40\xC0\x80\x00\x00\x00\x00\x00\x00\x00\x0F\x0F\x00\x00\x00\x00\x00\x80\xC1\x7F\x3E\x00\x00\x00\x00\x00\xC0\xC0\x00\x00\x01\x01\x01\x03\x02\x06\xFC\xF0\x00\x00\x00\x00\x03\x07\x04\x08\x08\x08\x08\x08\x04\x06\x03\x00\x00\x00",#3#3
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x60\x10\x0C\x03\xFF\xFF\x00\x00\x00\x00\x00\x00\x30\x2C\x26\x21\x20\x20\x20\x20\xFF\xFF\x20\x20\x20\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x08\x0F\x0F\x08\x08\x08\x00\x00",#4#4
b"\x00\x00\x00\x00\xC0\xC0\xC0\xC0\xC0\xC0\xC0\xC0\xC0\xC0\x00\x00\x00\x00\x00\xFF\x00\x80\x40\x40\x40\x40\xC0\x80\x00\x00\x00\x00\x00\x00\xC0\xC3\x01\x00\x00\x00\x00\x00\x00\x01\xFF\xFC\x00\x00\x00\x00\x03\x04\x04\x08\x08\x08\x08\x08\x04\x07\x03\x00\x00\x00",#5#5
b"\x00\x00\x00\x00\x00\x80\x80\x40\x40\x40\x40\x80\x80\x00\x00\x00\x00\x00\xE0\xFC\x07\x81\xC0\x40\x40\x40\xC0\x83\x03\x00\x00\x00\x00\x00\x7F\xFF\x83\x00\x00\x00\x00\x00\x00\x01\xFF\xFC\x00\x00\x00\x00\x00\x01\x07\x06\x0C\x08\x08\x08\x0C\x06\x03\x00\x00\x00",#6#6
b"\x00\x00\x00\xC0\xC0\xC0\xC0\xC0\xC0\xC0\xC0\xC0\xC0\xC0\x00\x00\x00\x00\x0E\x03\x00\x00\x00\x00\x00\xE0\x18\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xFC\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0F\x0F\x00\x00\x00\x00\x00\x00\x00\x00",#7#7
b"\x00\x00\x00\x00\x80\xC0\x40\x40\x40\x40\xC0\x80\x00\x00\x00\x00\x00\x00\x3E\x7F\xF1\xC0\xC0\x80\x00\x00\x80\x41\x7F\x1E\x00\x00\x00\xF0\xFC\x0E\x02\x01\x01\x01\x03\x07\x0E\x1E\xFC\xF0\x00\x00\x00\x01\x03\x06\x04\x08\x08\x08\x08\x08\x04\x06\x03\x01\x00\x00",#8#8
b"\x00\x00\x00\x80\x80\x40\x40\x40\x40\x40\x80\x00\x00\x00\x00\x00\x00\xFC\xFF\x03\x00\x00\x00\x00\x00\x00\x00\x03\xFE\xF8\x00\x00\x00\x01\x03\x07\x0C\x08\x08\x08\x08\x04\x06\xE1\x7F\x1F\x00\x00\x00\x00\x07\x07\x08\x08\x08\x08\x0C\x06\x03\x01\x00\x00\x00\x00",#9#9
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xE0\xE0\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x0F\x0F\x06\x00\x00\x00\x00\x00\x00",#:#10
]
a=fb.screen(128,64,128,64)
a.lcdinit()
b=fb.screen(128,16,128,8)
c=fb.screen(128,64,0,0)
def sync_ntp(self):
    ntptime.NTP_DELTA = 3155644800   # 可选 UTC+8偏移时间（秒），不设置就是UTC0
    ntptime.host = 'ntp1.aliyun.com'  # 可选，ntp服务器，默认是"pool.ntp.org"
    try:
        ntptime.settime()   # 修改设备时间,到这就已经设置好了
    except:
        t=rtc.datetime()
        b.print("Ntp syncing...")
        ti=Timer(1)
        ti.init(period=10000, mode=Timer.ONE_SHOT, callback=sync_ntp)

        return False
    else:
        t=rtc.datetime()
        showtime(t,True)
        return True

sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.scan()     


#sta_if.connect("<AP_name>", "<password>") # Connect to an AP
def connectWifi(self):
    if not sta_if.isconnected():
        sta_if.connect("Network_1", "15368274761")
        t=rtc.datetime()
        b.print("connecting...")
        ti=Timer(1)
        ti.init(period=5000, mode=Timer.ONE_SHOT, callback=connectWifi)
    else:
        sync_ntp(0)




rtc = RTC()


i2c = I2C(1, scl=Pin(18), sda=Pin(19), freq=400000)


t=rtc.datetime()
connectWifi(0)
sht=sht31.SHT31(i2c)

def sss(self):
    t=rtc.datetime()
    print( i2c.scan())
    #a.print( "{0:0>2d}:{1:0>2d}:{2:0>2d}".format(t[4],t[5],t[6]) )
    showtime(t,False)


def showtime(t,f=False):
    if f or t[6]==0:
        c.lcdAddress(16*7,0,16,32)
        c.lcdData(zf[t[6]%10])
        c.lcdAddress(16*6,0,16,32)
        c.lcdData(zf[t[6]//10])

        c.lcdAddress(16*4,0,16,32)
        c.lcdData(zf[t[5]%10])
        c.lcdAddress(16*3,0,16,32)
        c.lcdData(zf[t[5]//10])

        c.lcdAddress(16*1,0,16,32)
        c.lcdData(zf[t[4]%10])
        c.lcdAddress(16*0,0,16,32)
        c.lcdData(zf[t[4]//10])
    elif t[6]%10 == 0 and t[6] != 0 :
        c.lcdAddress(16*7,0,16,32)
        c.lcdData(zf[t[6]%10])
        c.lcdAddress(16*6,0,16,32)
        c.lcdData(zf[t[6]//10])
    else:
        c.lcdAddress(16*7,0,16,32)
        c.lcdData(zf[t[6]%10])


ow = onewire.OneWire(Pin(25)) # create a OneWire bus on GPIO12
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
t=rtc.datetime()
a.lcdAddress(16*2,0,16,32)
a.lcdData(zf[10])
a.lcdAddress(16*5,0,16,32)
a.lcdData(zf[10])
showtime(t,True)
def ds18b20convert_temp(self):
    ds.convert_temp()

    t=Timer(2)
    t.init(period=1000, mode=Timer.ONE_SHOT, callback=dsReadTemp)

def dsReadTemp(self):

    b.print("%.2fC"%ds.read_temp(roms[0]))
    b.print("%.2fC %.2f%%"%(sht.get_temp_humi()))
    tim1 = Timer(2)
    tim1.init(period=2500, mode=Timer.ONE_SHOT, callback=ds18b20convert_temp)

utime.sleep_us(1000000-t[7])

#tim1 = Timer(2)
#tim1.init(period=2500, mode=Timer.ONE_SHOT, callback=ds18b20convert_temp)

tim0 = Timer(0)
tim0.init(period=1000, mode=Timer.PERIODIC, callback=sss)
